package org.summerframework.core.base.service;


import org.summerframework.core.base.dto.BaseDTO;
import org.summerframework.core.exception.WebException;
import org.summerframework.core.page.PageResult;
import org.summerframework.core.page.PaginationQuery;

import java.util.List;

/**
 * 可批量查询基层接口
 * <p>
 * 必须使用泛型, 不然转化对象会出问题
 * <p>
 * {@link org.apache.commons.beanutils.BeanUtils}
 *
 * @param <T> dto对象
 * @param <Q> 查询对象
 * @author 石超
 * @version 1.0.0
 */
public interface BaseQueryService<T extends BaseDTO, Q extends PaginationQuery> extends
        BaseService<T> {

    /**
     * 查询总条数
     *
     * @param query 查询对象
     * @return 结果数
     */
    Integer selectCountByQuery(Q query) throws WebException;

    /**
     * 根据query查询
     *
     * @param query 查询对象
     * @return 最终对象
     */
    List<T> selectByQuery(Q query) throws WebException;

    /**
     * 根据query查询
     *
     * @param query 查询对象
     * @return 最终对象
     */
    PageResult<T> selectPageResultByQuery(Q query) throws WebException;

    T selectOne(Q query) throws WebException;
}
